package dbmanager

import (
	"gitee.com/night-tc/gobige/entity/props"
	"gitee.com/night-tc/gobige/global"
	"gitee.com/night-tc/gobige/logger"
)

/*
重新实现IPropsDirtySorter接口
支持DataArgs标脏的属性分流器
*/
type PropsDirtySave struct {
	args  *DataArgs
	model IDataBaseModel
}

// 初始化 支持DataArgs标脏的属性分流器
func NewPropsDirtySave(model IDataBaseModel, args *DataArgs) *PropsDirtySave {
	return &PropsDirtySave{
		args:  args,
		model: model,
	}
}

func (this *PropsDirtySave) GetSorterType() props.EDPSorterType {
	return props.EDPSorterTypeSave
}

// 标记脏数据
func (this *PropsDirtySave) FlagDirty(p props.IProp) {
	if p.GetField().SaveSrv == global.GetCfgInst().GetDefType() {
		_ = this.args.SetUpdate(this.model, p.GetName(), p.GetValue())
	}
}

// 本来是返回有多少字段发生变化，这里只需要返回有变化为非0
func (this *PropsDirtySave) ListCount() int {
	// 这个实现用于保存，不会运行到这里
	logger.Warnf("PropsDirtySave.ListCount() should not be called")
	return len(this.args.dblist)
}

// 成员遍历回调
func (this *PropsDirtySave) HandlerForEach(consumeFunc func(p props.IProp)) {
	// 这个实现用于保存，不会运行到这里
	logger.Warnf("PropsDirtySave.HandlerForEach() should not be called")
}

// 列表获取回调
func (this *PropsDirtySave) HandlerAllList(consumeListFunc func(list []props.IProp) bool) {
	// 这个实现用于保存，不会运行到这里
	logger.Warnf("PropsDirtySave.HandlerAllList() should not be called")
}

/*
弹出脏数据
这里需要注意，返回的切片与分流器里的是同一份数组，需要确保拿到这个切片后，
只做遍历，不做保留处理；
*/
func (this *PropsDirtySave) PopDirtyList() (result []props.IProp) {
	// 这个实现用于保存，不会运行到这里
	logger.Warnf("PropsDirtySave.PopDirtyList() should not be called")
	return
}
